package me.mingshan.leetcode;

import java.util.Arrays;

/**
 * https://leetcode.cn/problems/sort-vowels-in-a-string/description/
 *
 * 将字符串中的元音字母按升序排序并返回结果字符串。
 *
 * 给你一个下标从 0 开始的字符串 s ，将 s 中的元素重新 排列 得到新的字符串 t ，它满足：
 *
 * 所有辅音字母都在原来的位置上。更正式的，如果满足 0 <= i < s.length 的下标 i 处的 s[i] 是个辅音字母，那么 t[i] = s[i] 。
 * 元音字母都必须以他们的 ASCII 值按 非递减 顺序排列。更正式的，对于满足 0 <= i < j < s.length 的下标 i 和 j  ，如果 s[i] 和 s[j] 都是元音字母，那么 t[i] 的 ASCII 值不能大于 t[j] 的 ASCII 值。
 * 请你返回结果字母串。
 *
 * 元音字母为 'a' ，'e' ，'i' ，'o' 和 'u' ，它们可能是小写字母也可能是大写字母，辅音字母是除了这 5 个字母以外的所有字母。
 *
 *
 *
 * 示例 1：
 *
 * 输入：s = "lEetcOde"
 * 输出："lEOtcede"
 * 解释：'E' ，'O' 和 'e' 是 s 中的元音字母，'l' ，'t' ，'c' 和 'd' 是所有的辅音。将元音字母按照 ASCII 值排序，辅音字母留在原地。
 * 示例 2：
 *
 * 输入：s = "lYmpH"
 * 输出："lYmpH"
 * 解释：s 中没有元音字母（s 中都为辅音字母），所以我们返回 "lYmpH" 。
 *
 * @author hanjuntao
 * @date 2025/7/15 0015
 */
public class L_2785_sort_vowels_in_a_string {

    public static void main(String[] args) {
        System.out.println(sortVowels("lEetcOde"));
        System.out.println(sortVowels("lYmpH"));
    }

    /**
     * 辅音字母 原地不变
     * 元音字母 按照ASCII码排序
     *
     * 然后再将排序后的元音字母重新赋值给结果数组
     *
     *
     * @param s
     * @return
     */
    public static String sortVowels(String s) {
        char[] charArray = s.toCharArray();
        char[] vowels = new char[s.length()];

        int x = 0;
        for (int i = 0; i < charArray.length; i++) {
            if (isVowel(charArray[i])) {
                vowels[x] = charArray[i];
                x++;
            }
        }

        // 元音排序
        Arrays.sort(vowels);

        // 填充元音
        int j = 0;
        for (int i = 0; i < vowels.length; i++) {
            if (vowels[i] != 0) {
                j = i;
                break;
            }
        }

        for (int i = 0; i < charArray.length; i++) {
            if (isVowel(charArray[i])) {
                charArray[i] = vowels[j];
                j++;
            }
        }

        return new String(charArray);
    }

    private static boolean isVowel(char charArray) {
        return charArray == 'a' || charArray == 'e'
                || charArray == 'i' || charArray == 'o'
                || charArray == 'u' || charArray == 'A'
                || charArray == 'E' || charArray == 'I'
                || charArray == 'O' || charArray == 'U';
    }
}
